1.page-level mapping
每个逻辑页地址对应一个物理页地址(逻辑页地址来自FS给出的,物理页地址是在Flash上的存储位置)
2.block-level mapping
block是一个擦除块
给出逻辑块地址 找到 物理块地址
给出的逻辑页地址 = 物理块中的页地址
带来性能损失的原因:
只能在块的级别变更映射.
如果在不停的修改同一个逻辑地址的内容即:(逻辑块地址:逻辑页地址)一直不变
第一次:逻辑块地址LBN -> 物理块PBN1,页地址都是LPN = PPN
第二次:要修改第一次逻辑地址指定的位置。由于要异地更新,即(PBN1,PPN=LPN)要变化,而只能通过PBN1的变化来实现。要将整个PBN1指定的物理块的内容全都搬到新的物理块PBN2中去。
如果一直重复对相同逻辑地址的访问,就要不停的搬动整个物理块中的内容。带来大量copy(read,write)+erase。导致性能下降。。
3.hybirdmapping
同2,但是逻辑页地址 不再等同于 物理页地址。这样,对同一个逻辑地址的修改,可以在同一个物理块中找新页来存,而不用整个块不停的搬动。
来自:对<A survey of Flash Translation Layer>的理解.